// main.js (Uni-app - Vue 3)
import { createSSRApp } from 'vue' // Uni-app 使用 createSSRApp
import App from './App' // 注意：Uni-app 的入口通常是 App.vue 或 App.uvue，但这里引用的是编译后的 App 对象

// 1. 引入第三方库
import axios from 'axios';
import { library } from '@fortawesome/fontawesome-svg-core'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { faChevronRight, faChevronDown } from '@fortawesome/free-solid-svg-icons'
import { Buffer } from 'buffer';

// 全局注入 Buffer (在浏览器环境中)
if (typeof window !== 'undefined') {
  window.Buffer = Buffer;
}

// 添加图标到库中
library.add(faChevronRight, faChevronDown)

export function createApp() {
  // 2. 创建应用实例
  const app = createSSRApp(App)

  // 3. 全局注册组件
  app.component('FontAwesomeIcon', FontAwesomeIcon)

  // 4. 全局配置 axios
  // 创建一个 axios 实例并挂载到全局属性
  const http = axios.create({
    baseURL: 'http://localhost:8080/api'
    // 注意：在小程序环境中，需要确保 baseURL 是 HTTPS 且已配置到小程序的 request 合法域名中
    // 小程序不支持 HTTP
  });

  // 将 axios 实例挂载到 app.config.globalProperties，这样在组件中可以通过 this.$http (Options API) 或 app.config.globalProperties.$http (Composition API setup) 访问
  app.config.globalProperties.$http = http;

  // 5. 路由 (重要区别！)
  // Uni-app 有自己的路由系统 (uni.navigateTo, uni.redirectTo 等)，不使用 vue-router。
  // 如果你有复杂的路由逻辑，可以考虑使用 Uni-app 的页面栈管理或第三方 Uni-app 路由插件。
  // 这里通常不需要 app.use(router)。
  // 如果你坚持要集成 vue-router (例如为了 H5 端的 SEO 或复杂 SPA 逻辑)，情况会非常复杂，且在小程序端不生效。
  // 通常建议遵循 Uni-app 的原生导航方式。

  // 6. 返回应用实例 (Uni-app 特有)
  return {
    app
    // 如果需要使用 Pinia 等状态管理，也需要在这里返回
    // 如: store: createPinia()
  }
}